home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / ibmchess.arc / CHESS.BAS (.txt) next >
Encoding:
GW-BASIC  |  1985-08-13  |  6.4 KB  |  189 lines

  1. 10  CO=&H1C00:DEF SEG=&HFFFF:IF PEEK(14)=253 THEN CO=&H1700:I=1
  2. 20  DA=CO+49:DEF SEG=CO:BLOAD"chess.bld",0:IF I THEN POKE 3,23:POKE 16,23
  3. 30  DEF SEG=DA:GOSUB 690
  4. 40  M=40:N=158:K=21
  5. 50  POKE 43,1-BB:GOTO 180
  6. 60  IF C2 THEN 180
  7. 70  POKE 223,0:DEF SEG=CO:SOUND 99,0:CALL ML:DEF SEG=DA
  8. 80  IF PEEK(95)<229 AND PEEK(95)>150 THEN I=0:GOTO 120
  9. 90  K1=PEEK(92):K=PEEK(93):SOUND 500,1:GOSUB 1190:GOSUB 950
  10. 100  IF PEEK(95)>99 OR PEEK(95)<28 THEN 180
  11. 110  I=1
  12. 120  X=I+BB+PEEK(43):IF I=0 THEN POKE 43,-(PEEK(43)=0)
  13. 130  GOSUB 1410:PRINT"Checkmate!  ";
  14. 140  IF X/2-INT(X/2) THEN PRINT"White wins.":GOTO 160
  15. 150  PRINT"Black wins."
  16. 160  SOUND 999,9:FOR J=0 TO 200:NEXT
  17. 170  SOUND 260,9:FOR J=0 TO 200:NEXT
  18. 180  F=0:M=M-8:N=N-3
  19. 190  GOSUB 680
  20. 200  C$=INKEY$:IF C$="" THEN 200
  21. 210  IF LEN(C$)=1 THEN 270
  22. 220  C=ASC(RIGHT$(C$,1)):IF C=75 AND M>32 THEN GOSUB 680:M=M-31:K=K-1:GOTO 190
  23. 230  IF C=77 AND M<249 THEN GOSUB 680:M=M+31:K=K+1:GOTO 190
  24. 240  IF C=72 AND N>8 THEN GOSUB 680:N=N-21:K=K+10:GOTO 190
  25. 250  IF C=80 AND N<155 THEN GOSUB 680:N=N+21:K=K-10:GOTO 190
  26. 260  GOTO 200
  27. 270  C=ASC(C$):GOSUB 1400:IF C<>13 OR F=0 THEN 360
  28. 280  POKE 92,K1:POKE 93,K:J=PEEK(41):POKE 41,1:POKE 223,1
  29. 290  DEF SEG=CO:CALL ML:DEF SEG=DA
  30. 300  POKE 41,J:IF PEEK(224)=0 THEN 320
  31. 310  GOSUB 1190:GOSUB 950:GOTO 60
  32. 320  X=PEEK(103+K1):IF (X=6 OR X=250) AND ABS(K-K1)=2 THEN GOSUB 1190:GOSUB 950:Y=K1:K1=21-70*(X>6)-7*(K>K1):K=K+(K>Y)-(Y>K):MM=MM-1:GOSUB 1190:PR(MV)=1:GOSUB 950:GOTO 60
  33. 330  IF PEEK(103+K) THEN 350
  34. 340  IF (X=1 OR X=255) AND (ABS(K-K1)=9 OR ABS(K-K1)=11) THEN GOSUB 1190:GOSUB 950:K=K+10*(X=1)-10*(X>1):MM=MM-1:GOSUB 1190:PR(MV)=1:GOSUB 950:GOTO 60
  35. 350  SOUND 100,4:F=0:POKE 43,-(PEEK(43)=0):GOTO 200
  36. 360  IF F THEN 200
  37. 370  IF C<>13 OR PEEK(103+K)=0 THEN 410
  38. 380  IF PEEK(43) AND PEEK(103+K)<7 THEN 400
  39. 390  IF PEEK(43) OR PEEK(103+K)<7 THEN 410
  40. 400  K1=K:F=1:SOUND 500,1:GOTO 200
  41. 410  S=0
  42. 420  IF D(S)=C THEN 450
  43. 430  S=S+1:IF S<28 THEN 420
  44. 440  GOTO 200
  45. 450  IF S>22 THEN SOUND 500,1:LOCATE 1,22:PRINT C$:POKE 41,VAL(C$):GOTO 200
  46. 460  IF S=13 THEN SOUND 500,1:GOSUB 680:M=M+8:N=N+3:GOTO 70
  47. 470  IF S=14 THEN SOUND 500,1:FOR I=0 TO 70 STEP 10:FOR J=0 TO 7:POKE 124+I+J,0:NEXT:NEXT:MX=0:MV=0:MM=0:BB=0:GOSUB 900:GOTO 40
  48. 480  IF S<>15 OR MV=0 THEN 530
  49. 490  SOUND 500,1:POKE 43,-(PEEK(43)=0):GOSUB 680:GOSUB 1200:MM=MM-1:GOSUB 1430
  50. 500  IF ABS(PC(MV)-128)=122 AND ABS(FR(MV)-T(MV))=2 THEN GOSUB 1200
  51. 510  IF ABS(PC(MV)-128)=127 AND PC(MV+1)=0 AND MV<MX THEN GOSUB 1200
  52. 520  GOTO 180
  53. 530  IF S<>16 OR MV>=MX THEN 580
  54. 540  SOUND 500,1:POKE 43,-(PEEK(43)=0):GOSUB 680:GOSUB 1210:MM=MM+1:GOSUB 1430
  55. 550  IF ABS(PC(MV)-128)=122 AND ABS(FR(MV)-T(MV))=2 THEN GOSUB 1210
  56. 560  IF ABS(PC(MV)-128)=127 AND PC(MV+1)=0 AND MV<MX THEN GOSUB 1210
  57. 570  GOTO 180
  58. 580  IF S=17 THEN BB=0:GOTO 670
  59. 590  IF S=18 THEN 1280
  60. 600  IF S=19 THEN 1220
  61. 610  IF S=20 THEN 1340
  62. 620  IF S=21 THEN BB=1:GOTO 670
  63. 630  IF S=22 THEN SOUND 500,1:C2=1-C2
  64. 640  IF S>12 THEN 200
  65. 650  SOUND 500,1:IF S>6 THEN S=262-S
  66. 660  POKE 103+K,S:GOSUB 950:M=M-8:N=N-3:GOTO 190
  67. 670  SOUND 500,1:MV=0:MM=0:FOR I=0 TO 77:POKE I+124,BD(I):NEXT:GOSUB 890:GOTO 40
  68. 680  PUT (M,N),F,XOR:RETURN
  69. 690  KEY OFF:SCREEN 1,0:COLOR 0,1:CLS
  70. 700  POKE 41,1
  71. 710  DEFINT P,N,B,R,Q,K,F
  72. 720  DIM A(64),C(64),D(27),P(30),N(30),B(30),R(30),Q(30),K(30),F(82),FR(200),T(200),PC(200),CA(200),PR(200),BD(77)
  73. 730  FOR I=0 TO 27:READ D(I):NEXT
  74. 740  LINE (0,0)-(29,19),1,BF
  75. 750  GET (0,0)-(29,19),A:CLS
  76. 760  LINE (0,0)-(29,19),2,BF
  77. 770  GET (0,0)-(29,19),C:CLS
  78. 780  LOCATE 10,18:PRINT "CHESS"
  79. 790  LOCATE 12,15:PRINT "John Krause"
  80. 800  FOR I=103 TO 222:POKE I,7:NEXT
  81. 810  FOR I=0 TO 77:READ BD(I):POKE I+124,BD(I):NEXT
  82. 820  FOR K=0 TO 30:READ P(K):NEXT
  83. 830  FOR K=0 TO 30:READ N(K):NEXT
  84. 840  FOR K=0 TO 30:READ B(K):NEXT
  85. 850  FOR K=0 TO 30:READ R(K):NEXT
  86. 860  FOR K=0 TO 30:READ Q(K):NEXT
  87. 870  FOR K=0 TO 30:READ K(K):NEXT
  88. 880  FOR K=0 TO 82:READ F(K):NEXT:CLS
  89. 890  IF BB THEN POKE 127,6:POKE 128,5:POKE 197,250:POKE 198,251
  90. 900  LOCATE 1,5:PRINT"Move#      Level"PEEK(41)"  To move:":GOSUB 1430
  91. 910  FOR I=0 TO 7:FOR J=0 TO 7
  92. 920  H=70-10*I+J:GOSUB 960:NEXT:NEXT
  93. 930  FOR I=1 TO 8:LOCATE 3*I-1+(I>4),2:PRINT 9-I:NEXT
  94. 940  GOSUB 1400:RETURN
  95. 950  H=K-21:I=INT(H/10):J=H-10*I:I=7-I
  96. 960  M=31*J+40:N=21*I+11
  97. 970  IF INT((I+J)/2)-(I+J)/2 THEN PUT (M-8,N-3),C,PSET:GOTO 990
  98. 980  PUT (M-8,N-3),A,PSET
  99. 990  L=PEEK(124+H):IF I=0 AND L=1 THEN L=5:POKE 124+H,L
  100. 1000  IF I=7 AND L=255 THEN L=251:POKE 124+H,L
  101. 1010  IF L>6 THEN L=L-256
  102. 1020  ON ABS(L) GOTO 1040,1050,1060,1070,1080,1090
  103. 1030  GOTO 1100
  104. 1040  PUT (M,N),P,OR:GOTO 1100
  105. 1050  PUT (M,N),N,OR:GOTO 1100
  106. 1060  PUT (M,N),B,OR:GOTO 1100
  107. 1070  PUT (M,N),R,OR:GOTO 1100
  108. 1080  PUT (M,N),Q,OR:GOTO 1100
  109. 1090  PUT (M,N),K,OR
  110. 1100  IF BB THEN L=-L
  111. 1110  IF L>=0 THEN RETURN
  112. 1120  ON -L GOTO 1130,1140,1150,1160,1170,1180
  113. 1130  PUT (M,N),P,XOR:RETURN
  114. 1140  PUT (M,N),N,XOR:RETURN
  115. 1150  PUT (M,N),B,XOR:RETURN
  116. 1160  PUT (M,N),R,XOR:RETURN
  117. 1170  PUT (M,N),Q,XOR:RETURN
  118. 1180  PUT (M,N),K,XOR:RETURN
  119. 1190  K2=K:K=K1:MV=MV+1:PR(MV)=0:MM=MM+1:MX=MV:FR(MV)=K:PC(MV)=PEEK(103+K):POKE 103+K,0:GOSUB 950:K=K2:T(MV)=K:CA(MV)=PEEK(103+K):POKE 103+K,PC(MV):GOSUB 1430:RETURN
  120. 1200  POKE 103+FR(MV),PC(MV):POKE 103+T(MV),CA(MV):K=T(MV):GOSUB 950:K=FR(MV):GOSUB 950:MV=MV-1:RETURN
  121. 1210  MV=MV+1:POKE 103+T(MV),PEEK(103+FR(MV)):POKE 103+FR(MV),0:K=FR(MV):GOSUB 950:K=T(MV):GOSUB 950:RETURN
  122. 1220  SOUND 500,1:GOSUB 1410:INPUT"Save: ",N$
  123. 1230  ON ERROR GOTO 1420
  124. 1240  OPEN N$+".chs" FOR OUTPUT AS #1
  125. 1250  FOR I=124 TO 201:PRINT #1,PEEK(I):NEXT
  126. 1260  PRINT #1,PEEK(41),PEEK(43),MV,MX,MM,BB,M,N,K,C2
  127. 1270  FOR I=1 TO MX:PRINT #1,T(I),FR(I),PC(I),CA(I),PR(I):NEXT:CLOSE #1:ON ERROR GOTO 0:GOSUB 1400:GOTO 200
  128. 1280  SOUND 500,1:GOSUB 1410:INPUT"Load: ",N$
  129. 1290  ON ERROR GOTO 1420
  130. 1300  OPEN N$+".chs" FOR INPUT AS #1
  131. 1310  FOR I=124 TO 201:INPUT #1,J:POKE I,J:NEXT
  132. 1320  INPUT #1,X,J,MV,MX,MM,BB,M1,N1,K1,C2:POKE 41,X:POKE 43,J
  133. 1330  FOR I=1 TO MX:INPUT #1,T(I),FR(I),PC(I),CA(I),PR(I):NEXT:CLOSE #1:ON ERROR GOTO 0:GOSUB 900:M=M1:N=N1:K=K1:GOTO 190
  134. 1340  SOUND 500,1:X=0:FOR I=1 TO MX:IF PR(I) THEN 1370
  135. 1350  X=X+1:IF X/2-INT(X/2) THEN LPRINT(X+1)/2" ";:GOSUB 1380:GOTO 1370
  136. 1360  LPRINT"   ";:GOSUB 1380:LPRINT
  137. 1370  NEXT:LPRINT:GOTO 200
  138. 1380  J=INT(FR(I)/10):LPRINT CHR$(64+FR(I)-10*J);MID$(STR$(J-1),2,1)"-";
  139. 1390  J=INT(T(I)/10):LPRINT CHR$(64+T(I)-10*J);MID$(STR$(J-1),2,1);:RETURN
  140. 1400  LOCATE 23,6:PRINT "A   B   C   D   E   F   G   H":RETURN
  141. 1410  LOCATE 23,6:PRINT"                             ":LOCATE 23,9:RETURN
  142. 1420  GOSUB 1410:PRINT"Error #"ERR:RESUME 200
  143. 1430  LOCATE 1,10:PRINT INT(MM/2+1)" ":LOCATE 1,35:IF INT(MM/2)=MM/2 THEN PRINT CHR$(87):RETURN
  144. 1440  PRINT CHR$(66):RETURN
  145. 1450  DATA 32,80,78,66,82,81,75,16,14,2,18,17,11,109,99,98,102,110,108,115,112,105,116,49,50,51,52,53
  146. 1460  DATA 4,2,3,5,6,3,2,4,7
  147. 1470  DATA 7,1,1,1,1,1,1,1,1,7
  148. 1480  DATA 7,0,0,0,0,0,0,0,0,7
  149. 1490  DATA 7,0,0,0,0,0,0,0,0,7
  150. 1500  DATA 7,0,0,0,0,0,0,0,0,7
  151. 1510  DATA 7,0,0,0,0,0,0,0,0,7
  152. 1520  DATA 7,255,255,255,255,255,255,255,255,7
  153. 1530  DATA 7,252,254,253,251,250,253,254,252
  154. 1540  DATA 28,14,0,0,0,0,3840,0
  155. 1550  DATA 16128,192,16128,192,3840,0,16128,192
  156. 1560  DATA 3840,0,3840,0,16128,192,-256,240
  157. 1570  DATA -256,240,0,0,0,0,128
  158. 1580  DATA 28,14,3,0,-16381,0,-1021,0
  159. 1590  DATA -241,192,-244,240,-241,240,-241,252
  160. 1600  DATA -193,252,-12481,255,3852,255,16128,255
  161. 1610  DATA -256,255,-253,255,-253,255,-253
  162. 1620  DATA 28,14,-4096,240,-4096,240,-1021,252
  163. 1630  DATA -253,60,-253,204,-253,204,-253,204
  164. 1640  DATA -256,240,-16384,48,-256,240,-16384,48
  165. 1650  DATA -193,-16129,-3841,-3841,192,12288,-253
  166. 1660  DATA 28,14,16143,207,16143,207,-241,255
  167. 1670  DATA 3,12,-253,252,-253,252,-253,252
  168. 1680  DATA -253,252,-253,252,-253,252,3,12
  169. 1690  DATA -241,255,-193,-16129,-193,-16129,-193
  170. 1700  DATA 28,14,-16384,192,-16384,192,-16384,192
  171. 1710  DATA -16192,-16192,-3133,-16144,-3277,243,-3277,243
  172. 1720  DATA -193,255,12,12,-241,252,-3313,252
  173. 1730  DATA -241,252,12,12,-241,252,0
  174. 1740  DATA 28,14,-256,192,-13312,192,-3268,207
  175. 1750  DATA -13057,-16129,-1,-16129,-16129,-16129,-3265,255
  176. 1760  DATA -193,255,12,12,-241,252,-3313,252
  177. 1770  DATA -241,252,12,12,-241,252,0
  178. 1780  DATA 60,20,-1,-1,-1,-3841,-1,-1
  179. 1790  DATA -1,-3841,252,0,0,-4093,252,0
  180. 1800  DATA 0,-4093,252,0,0,-4093,252,0
  181. 1810  DATA 0,-4093,252,0,0,-4093,252,0
  182. 1820  DATA 0,-4093,252,0,0,-4093,252,0
  183. 1830  DATA 0,-4093,252,0,0,-4093,252,0
  184. 1840  DATA 0,-4093,252,0,0,-4093,252,0
  185. 1850  DATA 0,-4093,252,0,0,-4093,252,0
  186. 1860  DATA 0,-4093,252,0,0,-4093,252,0
  187. 1870  DATA 0,-4093,-1,-1,-1,-3841,-1,-1
  188. 1880  DATA -1,-3841,0
  189.